home *** CD-ROM | disk | FTP | other *** search
/ Aminet 4 / Aminet 4 - November 1994.iso / aminet / comm / term / term41source.lha / Extras / Source / term-Source.lha / ScreenPanel.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-08-02  |  42.8 KB  |  1,648 lines

  1. /*
  2. **    ScreenPanel.c
  3. **
  4. **    Editing panel for screen configuration
  5. **
  6. **    Copyright © 1990-1994 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_SCREENMODE=1,GAD_USE_PUBSCREEN,GAD_PUBSCREENNAME,GAD_FONT,
  13.         GAD_COLOURMODE,GAD_SCREENTITLE,GAD_MAKESCREENPUBLIC,GAD_SHANGHAI,
  14.         GAD_BLINKING,GAD_PALETTE,GAD_RED,GAD_GREEN,GAD_BLUE,GAD_RESET,
  15.         GAD_STDPENS,GAD_EDITPENS,GAD_WINDOW_BORDER,GAD_SPLIT_STATUS,
  16.         GAD_STATUS_LINE,
  17.  
  18.         GAD_USE,GAD_CANCEL,GAD_DEFAULT };
  19.  
  20.     /* ModeFilter(register __a1 ULONG ID):
  21.      *
  22.      *    Screen display mode filter, rejects all
  23.      *    modes unapproriate for screen display.
  24.      */
  25.  
  26. STATIC ULONG __saveds __asm
  27. ModeFilter(register __a1 ULONG ID)
  28. {
  29.     struct DimensionInfo DimensionInfo;
  30.  
  31.     if(GetDisplayInfoData(NULL,(APTR)&DimensionInfo,sizeof(struct DimensionInfo),DTAG_DIMS,ID))
  32.     {
  33.         if(DimensionInfo . TxtOScan . MaxX - DimensionInfo . TxtOScan . MinX + 1 >= 640)
  34.             return(TRUE);
  35.     }
  36.  
  37.     return(FALSE);
  38. }
  39.  
  40. STATIC BYTE __regargs
  41. IsWrongMode(struct Configuration *LocalConfig,WORD OriginalMode)
  42. {
  43.     if(Config -> ScreenConfig -> ColourMode != OriginalMode || LocalConfig -> ScreenConfig -> UseWorkbench || Config -> ScreenConfig -> UseWorkbench || !Screen)
  44.         return(TRUE);
  45.     else
  46.     {
  47.         LONG Depth;
  48.  
  49.         if(Kick30)
  50.             Depth = GetBitMapAttr(Window -> WScreen -> RastPort . BitMap,BMA_DEPTH);
  51.         else
  52.             Depth = Window -> WScreen -> RastPort . BitMap -> Depth;
  53.  
  54.         switch(LocalConfig -> ScreenConfig -> ColourMode)
  55.         {
  56.             case COLOUR_AMIGA:
  57.  
  58.                 if(Depth < 2)
  59.                     return(TRUE);
  60.  
  61.                 break;
  62.  
  63.             case COLOUR_EIGHT:
  64.  
  65.                 if(Depth < 3)
  66.                     return(TRUE);
  67.  
  68.                 break;
  69.  
  70.             case COLOUR_SIXTEEN:
  71.  
  72.                 if(Depth < 4)
  73.                     return(TRUE);
  74.  
  75.                 break;
  76.         }
  77.  
  78.         return(FALSE);
  79.     }
  80. }
  81.  
  82. STATIC BYTE  __regargs
  83. SelectDisplayMode(struct Window *Window,ULONG *CurrentMode,struct Configuration *Config)
  84. {
  85.     BYTE Success = FALSE;
  86.  
  87.     if(AslBase -> lib_Version < 38)
  88.     {
  89.         struct List    *ModeList;
  90.         LONG         Index;
  91.  
  92.         if(ModeList = BuildModeList(&Index,*CurrentMode,ModeFilter))
  93.         {
  94.             struct LayoutHandle *Handle;
  95.  
  96.             if(Handle = LT_CreateHandleTags(Window -> WScreen,
  97.                 LH_LocaleHook,    &LocaleHook,
  98.             TAG_DONE))
  99.             {
  100.                 struct Window *LocalWindow;
  101.  
  102.                 LT_New(Handle,
  103.                     LA_Type,    VERTICAL_KIND,
  104.                 TAG_DONE);
  105.                 {
  106.                     LT_New(Handle,
  107.                         LA_Type,    VERTICAL_KIND,
  108.                     TAG_DONE);
  109.                     {
  110.                         LT_New(Handle,
  111.                             LA_Type,    LISTVIEW_KIND,
  112.                             LA_LabelID,    MSG_V36_0160,
  113.                             GTLV_Labels,    ModeList,
  114.                             LA_LONG,    &Index,
  115.                             LALV_CursorKey,    TRUE,
  116.                             LALV_Link,    NIL_LINK,
  117.                             LALV_MaxGrowY,    20,
  118.                             LA_Lines,    10,
  119.                             LA_Chars,    40,
  120.                             LA_CursorKey,    TRUE,
  121.                         TAG_DONE);
  122.  
  123.                         LT_EndGroup(Handle);
  124.                     }
  125.  
  126.                     LT_New(Handle,
  127.                         LA_Type,VERTICAL_KIND,
  128.                     TAG_DONE);
  129.                     {
  130.                         LT_New(Handle,
  131.                             LA_Type,    XBAR_KIND,
  132.                             LAXB_FullSize,    TRUE,
  133.                         TAG_DONE);
  134.  
  135.                         LT_EndGroup(Handle);
  136.                     }
  137.  
  138.                     LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  139.                         LAGR_SameSize,    TRUE,
  140.                         LAGR_Spread,    TRUE,
  141.                     TAG_DONE);
  142.                     {
  143.                         LT_New(Handle,
  144.                             LA_Type,    BUTTON_KIND,
  145.                             LA_LabelID,    MSG_GLOBAL_USE_GAD,
  146.                             LA_ID,        GAD_USE,
  147.                             LABT_ReturnKey,    TRUE,
  148.                             LABT_ExtraFat,    TRUE,
  149.                         TAG_DONE);
  150.  
  151.                         LT_New(Handle,
  152.                             LA_Type,    BUTTON_KIND,
  153.                             LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  154.                             LA_ID,        GAD_CANCEL,
  155.                             LABT_EscKey,    TRUE,
  156.                             LABT_ExtraFat,    TRUE,
  157.                         TAG_DONE);
  158.  
  159.                         LT_EndGroup(Handle);
  160.                     }
  161.  
  162.                     LT_EndGroup(Handle);
  163.                 }
  164.  
  165.                 if(LocalWindow = LT_Layout(Handle,LocaleString(MSG_V36_0161),NULL,0,0,IDCMP_CLOSEWINDOW,NULL,
  166.                     LAWN_HelpHook,        &GuideHook,
  167.                     LAWN_Parent,        Window,
  168.                     WA_DepthGadget,        TRUE,
  169.                     WA_CloseGadget,        TRUE,
  170.                     WA_DragBar,        TRUE,
  171.                     WA_RMBTrap,        TRUE,
  172.                     WA_Activate,        TRUE,
  173.                 TAG_DONE))
  174.                 {
  175.                     struct IntuiMessage    *Message;
  176.                     BOOL             Done = FALSE;
  177.                     ULONG             MsgClass,
  178.                                  MsgQualifier;
  179.                     UWORD             MsgCode;
  180.                     struct Gadget        *MsgGadget;
  181.                     LONG             i;
  182.                     struct ModeNode        *ModeNode;
  183.  
  184.                     do
  185.                     {
  186.                         WaitPort(LocalWindow -> UserPort);
  187.  
  188.                         while(Message = (struct IntuiMessage *)GT_GetIMsg(LocalWindow -> UserPort))
  189.                         {
  190.                             MsgClass    = Message -> Class;
  191.                             MsgCode        = Message -> Code;
  192.                             MsgQualifier    = Message -> Qualifier;
  193.                             MsgGadget    = (struct Gadget *)Message -> IAddress;
  194.  
  195.                             GT_ReplyIMsg(Message);
  196.  
  197.                             LT_HandleInput(Handle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  198.  
  199.                             if(MsgClass == IDCMP_CLOSEWINDOW)
  200.                                 Done = TRUE;
  201.  
  202.                             if(MsgClass == IDCMP_GADGETUP)
  203.                             {
  204.                                 switch(MsgGadget -> GadgetID)
  205.                                 {
  206.                                     case GAD_USE:
  207.  
  208.                                         for(ModeNode = (struct ModeNode *)ModeList -> lh_Head, i = 0; ModeNode -> VanillaNode . ln_Succ ; ModeNode = (struct ModeNode *)ModeNode -> VanillaNode . ln_Succ, i++)
  209.                                         {
  210.                                             if(Index == i)
  211.                                             {
  212.                                                 *CurrentMode = ModeNode -> DisplayID;
  213.  
  214.                                                 break;
  215.                                             }
  216.                                         }
  217.  
  218.                                         Success = Done = TRUE;
  219.                                         break;
  220.  
  221.                                     case GAD_CANCEL:
  222.  
  223.                                         Done = TRUE;
  224.                                         break;
  225.                                 }
  226.                             }
  227.  
  228.                             if(MsgClass == IDCMP_IDCMPUPDATE)
  229.                             {
  230.                                 for(ModeNode = (struct ModeNode *)ModeList -> lh_Head, i = 0; ModeNode -> VanillaNode . ln_Succ ; ModeNode = (struct ModeNode *)ModeNode -> VanillaNode . ln_Succ, i++)
  231.                                 {
  232.                                     if(Index == i)
  233.                                     {
  234.                                         *CurrentMode = ModeNode -> DisplayID;
  235.  
  236.                                         Success = Done = TRUE;
  237.  
  238.                                         LT_PressButton(Handle,GAD_USE);
  239.  
  240.                                         break;
  241.                                     }
  242.                                 }
  243.                             }
  244.                         }
  245.                     }
  246.                     while(!Done);
  247.  
  248.                     if(Success)
  249.                     {
  250.                         Config -> ScreenConfig -> Depth        = 0;
  251.                         Config -> ScreenConfig -> OverscanType    = OSCAN_TEXT;
  252.                         Config -> ScreenConfig -> DisplayWidth    = 0;
  253.                         Config -> ScreenConfig -> DisplayHeight    = 0;
  254.                     }
  255.                 }
  256.  
  257.                 LT_DeleteHandle(Handle);
  258.             }
  259.  
  260.             DeleteList(ModeList);
  261.         }
  262.     }
  263.     else
  264.     {
  265.         struct ScreenModeRequester    *Request;
  266.         struct Hook             FilterHook;
  267.         LONG                 Left    = 0,
  268.                          Top    = 0,
  269.                          Width    = 0,
  270.                          Height    = 0,
  271.                          DisplayWidth,
  272.                          DisplayHeight,
  273.                          Depth,
  274.                          MinDepth;
  275.         struct Rectangle         DisplayClip;
  276.  
  277.         Depth = Config -> ScreenConfig -> Depth;
  278.  
  279.         GetWindowInfo(WINDOW_SCREEN,&Left,&Top,&Width,&Height,Window -> Width / 2,Window -> Height / 2);
  280.  
  281.         FilterHook . h_Entry    = (HOOKFUNC)ModeFilter;
  282.         FilterHook . h_SubEntry    = NULL;
  283.         FilterHook . h_Data    = NULL;
  284.  
  285.         switch(Config -> ScreenConfig -> ColourMode)
  286.         {
  287.             case COLOUR_AMIGA:
  288.  
  289.                 MinDepth = 2;
  290.                 break;
  291.  
  292.             case COLOUR_EIGHT:
  293.  
  294.                 MinDepth = 3;
  295.                 break;
  296.  
  297.             case COLOUR_SIXTEEN:
  298.  
  299.                 MinDepth = 4;
  300.                 break;
  301.  
  302.             case COLOUR_MONO:
  303.  
  304.                 MinDepth = 1;
  305.                 break;
  306.         }
  307.  
  308.         if(Depth < MinDepth)
  309.             Depth = MinDepth;
  310.  
  311.         if((!Config -> ScreenConfig -> DisplayWidth || !Config -> ScreenConfig -> DisplayHeight) && QueryOverscan(Config -> ScreenConfig -> DisplayMode,&DisplayClip,Config -> ScreenConfig -> OverscanType))
  312.         {
  313.             DisplayWidth    = DisplayClip . MaxX - DisplayClip . MinX + 1;
  314.             DisplayHeight    = DisplayClip . MaxY - DisplayClip . MinY + 1;
  315.         }
  316.         else
  317.         {
  318.             DisplayWidth    = Config -> ScreenConfig -> DisplayWidth;
  319.             DisplayHeight    = Config -> ScreenConfig -> DisplayHeight;
  320.         }
  321.  
  322.         if(Request = (struct ScreenModeRequester *)AllocAslRequestTags(ASL_ScreenModeRequest,
  323.             ASLSM_Window,            Window,
  324.             ASLSM_InitialDisplayID,        *CurrentMode,
  325.             ASLSM_FilterFunc,        &FilterHook,
  326.             ASLSM_PrivateIDCMP,        TRUE,
  327.             ASLSM_InitialDisplayDepth,    Depth,
  328.             ASLSM_MinDepth,            MinDepth,
  329.             ASLSM_MaxDepth,            8,
  330.             ASLSM_DoDepth,            TRUE,
  331.             ASLSM_MinWidth,            640,
  332.             ASLSM_MinHeight,        200,
  333.             ASLSM_DoWidth,            TRUE,
  334.             ASLSM_DoHeight,            TRUE,
  335.             ASLSM_DoOverscanType,        TRUE,
  336.             ASLSM_InitialOverscanType,    Config -> ScreenConfig -> OverscanType,
  337.  
  338.             DisplayWidth  ? ASLSM_InitialDisplayWidth  : TAG_IGNORE, DisplayWidth,
  339.             DisplayHeight ? ASLSM_InitialDisplayHeight : TAG_IGNORE, DisplayHeight,
  340.  
  341.             ASL_LeftEdge,            Left,
  342.             ASL_TopEdge,            Top,
  343.             ASL_Width,            Width,
  344.             ASL_Height,            Height,
  345.         TAG_DONE))
  346.         {
  347.             if(AslRequestTags(Request,TAG_DONE))
  348.             {
  349.                 PutWindowInfo(WINDOW_SCREEN,Request -> sm_LeftEdge,Request -> sm_TopEdge,Request -> sm_Width,Request -> sm_Height);
  350.  
  351.                 *CurrentMode = Request -> sm_DisplayID;
  352.  
  353.                 if(Request -> sm_DisplayDepth == MinDepth)
  354.                     Depth = 0;
  355.                 else
  356.                     Depth = Request -> sm_DisplayDepth;
  357.  
  358.                 Config -> ScreenConfig -> Depth        = Depth;
  359.                 Config -> ScreenConfig -> OverscanType    = Request -> sm_OverscanType;
  360.                 Config -> ScreenConfig -> DisplayWidth    = Request -> sm_DisplayWidth;
  361.                 Config -> ScreenConfig -> DisplayHeight    = Request -> sm_DisplayHeight;
  362.  
  363.                 Success = TRUE;
  364.             }
  365.  
  366.             FreeAslRequest(Request);
  367.         }
  368.     }
  369.  
  370.     return(Success);
  371. }
  372.  
  373. STATIC BOOLEAN __regargs
  374. PenPanel(struct Window *Window,UWORD *Array,UWORD *DefaultArray,WORD Depth)
  375. {
  376.     struct LayoutHandle    *Handle;
  377.     UWORD             PrivateArray[16];
  378.     BOOLEAN             Result = FALSE;
  379.  
  380.     CopyMem(Array,PrivateArray,sizeof(PrivateArray));
  381.  
  382.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  383.         LH_LocaleHook,    &LocaleHook,
  384.         LH_ExactClone,    TRUE,
  385.     TAG_DONE))
  386.     {
  387.         struct Window *PanelWindow;
  388.  
  389.         LT_New(Handle,
  390.             LA_Type,    VERTICAL_KIND,
  391.         TAG_DONE);
  392.         {
  393.             LT_New(Handle,
  394.                 LA_Type,    VERTICAL_KIND,
  395.                 LA_LabelID,    MSG_PENPANEL_DRAWING_PENS_TXT,
  396.             TAG_DONE);
  397.             {
  398.                 LT_New(Handle,
  399.                     LA_Type,    VERTICAL_KIND,
  400.                 TAG_DONE);
  401.                 {
  402.                     LT_New(Handle,
  403.                         LA_Type,        PALETTE_KIND,
  404.                         LA_LabelID,        MSG_PENPANEL_BACKGROUND_TXT,
  405.                         GTPA_Depth,        Depth,
  406.                         LAPA_SmallPalette,    TRUE,
  407.                         LA_UWORD,        &PrivateArray[BACKGROUNDPEN],
  408.                         LA_Chars,        15,
  409.                         LA_ID,            100 + BACKGROUNDPEN,
  410.                     TAG_DONE);
  411.  
  412.                     LT_New(Handle,
  413.                         LA_Type,        PALETTE_KIND,
  414.                         LA_LabelID,        MSG_PENPANEL_TEXT_TXT,
  415.                         GTPA_Depth,        Depth,
  416.                         LAPA_SmallPalette,    TRUE,
  417.                         LA_UWORD,        &PrivateArray[TEXTPEN],
  418.                         LA_ID,            100 + TEXTPEN,
  419.                     TAG_DONE);
  420.  
  421.                     LT_New(Handle,
  422.                         LA_Type,        PALETTE_KIND,
  423.                         LA_LabelID,        MSG_PENPANEL_IMPORTANT_TEXT_TXT,
  424.                         GTPA_Depth,        Depth,
  425.                         LAPA_SmallPalette,    TRUE,
  426.                         LA_UWORD,        &PrivateArray[HIGHLIGHTTEXTPEN],
  427.                         LA_ID,            100 + HIGHLIGHTTEXTPEN,
  428.                     TAG_DONE);
  429.  
  430.                     LT_New(Handle,
  431.                         LA_Type,        PALETTE_KIND,
  432.                         LA_LabelID,        MSG_PENPANEL_BRIGHT_EDGES_TXT,
  433.                         GTPA_Depth,        Depth,
  434.                         LAPA_SmallPalette,    TRUE,
  435.                         LA_UWORD,        &PrivateArray[SHINEPEN],
  436.                         LA_ID,            100 + SHINEPEN,
  437.                     TAG_DONE);
  438.  
  439.                     LT_New(Handle,
  440.                         LA_Type,        PALETTE_KIND,
  441.                         LA_LabelID,        MSG_PENPANEL_DARK_EDGES_TXT,
  442.                         GTPA_Depth,        Depth,
  443.                         LAPA_SmallPalette,    TRUE,
  444.                         LA_UWORD,        &PrivateArray[SHADOWPEN],
  445.                         LA_ID,            100 + SHADOWPEN,
  446.                     TAG_DONE);
  447.  
  448.                     LT_New(Handle,
  449.                         LA_Type,        PALETTE_KIND,
  450.                         LA_LabelID,        MSG_PENPANEL_FILLPEN_TXT,
  451.                         GTPA_Depth,        Depth,
  452.                         LAPA_SmallPalette,    TRUE,
  453.                         LA_UWORD,        &PrivateArray[FILLPEN],
  454.                         LA_ID,            100 + FILLPEN,
  455.                     TAG_DONE);
  456.  
  457.                     LT_New(Handle,
  458.                         LA_Type,        PALETTE_KIND,
  459.                         LA_LabelID,        MSG_PENPANEL_FILLTEXTPEN_TXT,
  460.                         GTPA_Depth,        Depth,
  461.                         LAPA_SmallPalette,    TRUE,
  462.                         LA_UWORD,        &PrivateArray[FILLTEXTPEN],
  463.                         LA_ID,            100 + FILLTEXTPEN,
  464.                     TAG_DONE);
  465.  
  466.                     LT_New(Handle,
  467.                         LA_Type,        PALETTE_KIND,
  468.                         LA_LabelID,        MSG_PENPANEL_BARFILLPEN_TXT,
  469.                         GTPA_Depth,        Depth,
  470.                         LAPA_SmallPalette,    TRUE,
  471.                         LA_UWORD,        &PrivateArray[BARBLOCKPEN],
  472.                         LA_ID,            100 + BARBLOCKPEN,
  473.                     TAG_DONE);
  474.  
  475.                     LT_New(Handle,
  476.                         LA_Type,        PALETTE_KIND,
  477.                         LA_LabelID,        MSG_PENPANEL_BARTEXTPEN_TXT,
  478.                         GTPA_Depth,        Depth,
  479.                         LAPA_SmallPalette,    TRUE,
  480.                         LA_UWORD,        &PrivateArray[BARDETAILPEN],
  481.                         LA_ID,            100 + BARDETAILPEN,
  482.                     TAG_DONE);
  483.  
  484.                     LT_EndGroup(Handle);
  485.                 }
  486.  
  487.                 LT_New(Handle,
  488.                     LA_Type,XBAR_KIND,
  489.                 TAG_DONE);
  490.  
  491.                 LT_New(Handle,
  492.                     LA_Type,    VERTICAL_KIND,
  493.                 TAG_DONE);
  494.                 {
  495.                     LT_New(Handle,
  496.                         LA_Type,    BUTTON_KIND,
  497.                         LA_LabelID,    MSG_PENPANEL_STANDARDPENS_TXT,
  498.                         LA_ID,        GAD_DEFAULT,
  499.                         LABT_ExtraFat,    TRUE,
  500.                     TAG_DONE);
  501.  
  502.                     LT_EndGroup(Handle);
  503.                 }
  504.  
  505.                 LT_EndGroup(Handle);
  506.             }
  507.  
  508.             LT_New(Handle,
  509.                 LA_Type,VERTICAL_KIND,
  510.             TAG_DONE);
  511.             {
  512.                 LT_New(Handle,
  513.                     LA_Type,    XBAR_KIND,
  514.                     LAXB_FullSize,    TRUE,
  515.                 TAG_DONE);
  516.  
  517.                 LT_EndGroup(Handle);
  518.             }
  519.  
  520.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  521.                 LAGR_SameSize,    TRUE,
  522.                 LAGR_Spread,    TRUE,
  523.             TAG_DONE);
  524.             {
  525.                 LT_New(Handle,
  526.                     LA_Type,    BUTTON_KIND,
  527.                     LA_LabelID,    MSG_GLOBAL_USE_GAD,
  528.                     LA_ID,        GAD_USE,
  529.                     LABT_ReturnKey,    TRUE,
  530.                     LABT_ExtraFat,    TRUE,
  531.                 TAG_DONE);
  532.  
  533.                 LT_New(Handle,
  534.                     LA_Type,    BUTTON_KIND,
  535.                     LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  536.                     LA_ID,        GAD_CANCEL,
  537.                     LABT_EscKey,    TRUE,
  538.                     LABT_ExtraFat,    TRUE,
  539.                 TAG_DONE);
  540.  
  541.                 LT_EndGroup(Handle);
  542.             }
  543.  
  544.             LT_EndGroup(Handle);
  545.         }
  546.  
  547.         if(PanelWindow = LT_Layout(Handle,LocaleString(MSG_PENPANEL_SCREEN_DRAWING_PENS_TXT),NULL,0,0,IDCMP_CLOSEWINDOW,0,
  548.             LAWN_HelpHook,        &GuideHook,
  549.             LAWN_Parent,        Window,
  550.             WA_DepthGadget,        TRUE,
  551.             WA_CloseGadget,        TRUE,
  552.             WA_DragBar,        TRUE,
  553.             WA_RMBTrap,        TRUE,
  554.             WA_Activate,        TRUE,
  555.         TAG_DONE))
  556.         {
  557.             struct IntuiMessage    *Message;
  558.             BOOLEAN             Done = FALSE;
  559.             ULONG             MsgClass,
  560.                          MsgQualifier;
  561.             UWORD             MsgCode;
  562.             struct Gadget        *MsgGadget;
  563.             WORD             i;
  564.  
  565.             PushWindow(PanelWindow);
  566.  
  567.             LT_ShowWindow(Handle,TRUE);
  568.  
  569.             GuideContext(CONTEXT_SCREEN);
  570.  
  571.             do
  572.             {
  573.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  574.                     break;
  575.  
  576.                 while(Message = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort))
  577.                 {
  578.                     MsgClass    = Message -> Class;
  579.                     MsgQualifier    = Message -> Qualifier;
  580.                     MsgCode        = Message -> Code;
  581.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  582.  
  583.                     GT_ReplyIMsg(Message);
  584.  
  585.                     LT_HandleInput(Handle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  586.  
  587.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  588.                         Done = TRUE;
  589.  
  590.                     if(MsgClass == IDCMP_GADGETUP)
  591.                     {
  592.                         switch(MsgGadget -> GadgetID)
  593.                         {
  594.                             case GAD_USE:
  595.  
  596.                                 CopyMem(PrivateArray,Array,sizeof(PrivateArray));
  597.  
  598.                                 Array[DETAILPEN]    = PrivateArray[BACKGROUNDPEN];
  599.                                 Array[BLOCKPEN]        = PrivateArray[SHADOWPEN];
  600.                                 Array[BARTRIMPEN]    = PrivateArray[BARDETAILPEN];
  601.  
  602.                                 Result = Done = TRUE;
  603.                                 break;
  604.  
  605.                             case GAD_CANCEL:
  606.  
  607.                                 Done = TRUE;
  608.                                 break;
  609.  
  610.                             case GAD_DEFAULT:
  611.  
  612.                                 for(i = TEXTPEN ; i <= BARBLOCKPEN ; i++)
  613.                                     LT_SetAttributes(Handle,100 + i,GTPA_Color,DefaultArray[i],TAG_DONE);
  614.  
  615.                                 break;
  616.                         }
  617.                     }
  618.                 }
  619.             }
  620.             while(!Done);
  621.  
  622.             PopWindow();
  623.         }
  624.  
  625.         LT_DeleteHandle(Handle);
  626.     }
  627.  
  628.     return(Result);
  629. }
  630.  
  631. BYTE __regargs
  632. ScreenPanel(struct Configuration *LocalConfig,BYTE *Default)
  633. {
  634.     struct LayoutHandle    *Handle;
  635.     BYTE             Cancel = FALSE;
  636.  
  637.     SaveConfig(LocalConfig,PrivateConfig);
  638.  
  639.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  640.         LH_LocaleHook,    &LocaleHook,
  641.         LH_ExactClone,    TRUE,
  642.     TAG_DONE))
  643.     {
  644.         struct Window    *LocalWindow;
  645.         UBYTE         ModeName[DISPLAYNAMELEN + 1],
  646.                  FontName[MAX_FILENAME_LENGTH];
  647.         ULONG         DisplayMode;
  648.         BOOL         WrongMode = IsWrongMode(LocalConfig,PrivateConfig -> ScreenConfig -> ColourMode);
  649.  
  650.         DisplayMode = LocalConfig -> ScreenConfig -> DisplayMode;
  651.  
  652.         if(ModeNotAvailable(DisplayMode))
  653.         {
  654.             struct Screen *PubScreen = LockPubScreen(NULL);
  655.  
  656.             if(PubScreen)
  657.             {
  658.                 DisplayMode = GetVPModeID(&PubScreen -> ViewPort);
  659.  
  660.                 UnlockPubScreen(NULL,PubScreen);
  661.             }
  662.             else
  663.                 DisplayMode = DEFAULT_MONITOR_ID | HIRES_KEY;
  664.         }
  665.  
  666.         strcpy(ModeName,GetModeName(DisplayMode));
  667.  
  668.         BuildFontName(FontName,LocalConfig -> ScreenConfig -> FontName,LocalConfig -> ScreenConfig -> FontHeight);
  669.  
  670.         LT_New(Handle,
  671.             LA_Type,    VERTICAL_KIND,
  672.         TAG_DONE);
  673.         {
  674.             LT_New(Handle,
  675.                 LA_Type,    HORIZONTAL_KIND,
  676.             TAG_DONE);
  677.             {
  678.                 LT_New(Handle,
  679.                     LA_Type,    VERTICAL_KIND,
  680.                 TAG_DONE);
  681.                 {
  682.                     LT_New(Handle,
  683.                         LA_Type,    VERTICAL_KIND,
  684.                         LA_LabelID,    MSG_V36_0163,
  685.                     TAG_DONE);
  686.                     {
  687.                         LT_New(Handle,
  688.                             LA_Type,    VERTICAL_KIND,
  689.                         TAG_DONE);
  690.                         {
  691.                             LT_New(Handle,
  692.                                 LA_Type,    TEXT_KIND,
  693.                                 LA_LabelID,    MSG_SCREENPANEL_CURRENT_DISPLAY_MODE_GAD,
  694.                                 LA_Chars,    20,
  695.                                 LA_ID,        GAD_SCREENMODE,
  696.                                 GTTX_Text,    ModeName,
  697.                                 GTTX_Border,    TRUE,
  698.                                 LATX_Picker,    TRUE,
  699.                             TAG_DONE);
  700.     
  701.                             LT_New(Handle,
  702.                                 LA_Type,    TEXT_KIND,
  703.                                 LA_LabelID,    MSG_SCREENPANEL_SCREEN_FONT_GAD,
  704.                                 LA_ID,        GAD_FONT,
  705.                                 GTTX_Text,    FontName,
  706.                                 GTTX_Border,    TRUE,
  707.                                 LATX_Picker,    TRUE,
  708.                             TAG_DONE);
  709.     
  710.                             LT_EndGroup(Handle);
  711.                         }
  712.  
  713.                         LT_New(Handle,
  714.                             LA_Type,    VERTICAL_KIND,
  715.                         TAG_DONE);
  716.                         {
  717.                             LT_New(Handle,
  718.                                 LA_Type,    CHECKBOX_KIND,
  719.                                 LA_LabelID,    MSG_SCREENPANEL_FASTER_LAYOUT_GAD,
  720.                                 LA_BYTE,    &LocalConfig -> ScreenConfig -> FasterLayout,
  721.                             TAG_DONE);
  722.     
  723.                             LT_New(Handle,
  724.                                 LA_Type,    CHECKBOX_KIND,
  725.                                 LA_LabelID,    MSG_SCREENPANEL_MAKE_SCREEN_PUBLIC_GAD,
  726.                                 LA_BYTE,    &LocalConfig -> ScreenConfig -> MakeScreenPublic,
  727.                                 LA_ID,        GAD_MAKESCREENPUBLIC,
  728.                                 GA_Disabled,    LocalConfig -> ScreenConfig -> UseWorkbench,
  729.                             TAG_DONE);
  730.     
  731.                             LT_New(Handle,
  732.                                 LA_Type,    CHECKBOX_KIND,
  733.                                 LA_ID,        GAD_SHANGHAI,
  734.                                 LA_LabelID,    MSG_SCREENPANEL_SHANGHAI_WINDOWS_GAD,
  735.                                 LA_BYTE,    &LocalConfig -> ScreenConfig -> ShanghaiWindows,
  736.                                 GA_Disabled,    LocalConfig -> ScreenConfig -> UseWorkbench,
  737.                             TAG_DONE);
  738.  
  739.                             LT_EndGroup(Handle);
  740.                         }
  741.  
  742.                         LT_New(Handle,
  743.                             LA_Type,    VERTICAL_KIND,
  744.                         TAG_DONE);
  745.                         {
  746.                             LT_New(Handle,
  747.                                 LA_Type,    XBAR_KIND,
  748.                             TAG_DONE);
  749.  
  750.                             LT_New(Handle,
  751.                                 LA_Type,    CHECKBOX_KIND,
  752.                                 LA_ID,        GAD_USE_PUBSCREEN,
  753.                                 LA_LabelID,    MSG_SCREENPANEL_USE_WORKBENCH_GAD,
  754.                                 LA_BYTE,    &LocalConfig -> ScreenConfig -> UseWorkbench,
  755.                             TAG_DONE);
  756.     
  757.                             LT_EndGroup(Handle);
  758.                         }
  759.  
  760.                         LT_New(Handle,
  761.                             LA_Type,    VERTICAL_KIND,
  762.                         TAG_DONE);
  763.                         {
  764.                             LT_New(Handle,
  765.                                 LA_Type,    STRING_KIND,
  766.                                 LA_LabelID,    MSG_SCREENPANEL_PUBSCREEN_NAME_GAD,
  767.                                 LA_ID,        GAD_PUBSCREENNAME,
  768.                                 LA_STRPTR,    LocalConfig -> ScreenConfig -> PubScreenName,
  769.                                 LA_Chars,    14,
  770.                                 GTST_MaxChars,    MAXPUBSCREENNAME,
  771.                                 LAST_Picker,    TRUE,
  772.                                 GA_Disabled,    !LocalConfig -> ScreenConfig -> UseWorkbench,
  773.                             TAG_DONE);
  774.  
  775.                             LT_EndGroup(Handle);
  776.                         }
  777.  
  778.                         LT_EndGroup(Handle);
  779.                     }
  780.  
  781.                     LT_New(Handle,
  782.                         LA_Type,    VERTICAL_KIND,
  783.                         LA_LabelID,    MSG_V36_0164,
  784.                     TAG_DONE);
  785.                     {
  786.                         LT_New(Handle,
  787.                             LA_Type,    VERTICAL_KIND,
  788.                         TAG_DONE);
  789.                         {
  790.                             LT_New(Handle,
  791.                                 LA_Type,    CHECKBOX_KIND,
  792.                                 LA_LabelID,    MSG_SCREENPANEL_SCREEN_TITLE_GAD,
  793.                                 LA_BYTE,    &LocalConfig -> ScreenConfig -> TitleBar,
  794.                                 LA_ID,        GAD_SCREENTITLE,
  795.                                 GA_Disabled,    LocalConfig -> ScreenConfig -> UseWorkbench,
  796.                             TAG_DONE);
  797.  
  798.                             LT_New(Handle,
  799.                                 LA_Type,    CHECKBOX_KIND,
  800.                                 LA_LabelID,    MSG_SCREENPANEL_WINDOW_BORDER_TXT,
  801.                                 LA_BYTE,    &LocalConfig -> ScreenConfig -> ShareScreen,
  802.                                 LA_ID,        GAD_WINDOW_BORDER,
  803.                                 GA_Disabled,    LocalConfig -> ScreenConfig -> UseWorkbench,
  804.                             TAG_DONE);
  805.  
  806.                             LocalConfig -> ScreenConfig -> StatusLine &= 0xF;
  807.  
  808.                             LT_New(Handle,
  809.                                 LA_Type,    CHECKBOX_KIND,
  810.                                 LA_LabelID,    MSG_SCREENPANEL_SEPARATE_STATUS_WINDOW_TXT,
  811.                                 LA_BYTE,    &LocalConfig -> ScreenConfig -> SplitStatus,
  812.                                 LA_ID,        GAD_SPLIT_STATUS,
  813.                                 GA_Disabled,    !LocalConfig -> ScreenConfig -> StatusLine || (!LocalConfig -> ScreenConfig -> ShareScreen && !LocalConfig -> ScreenConfig -> UseWorkbench),
  814.                             TAG_DONE);
  815.  
  816.                             LT_EndGroup(Handle);
  817.                         }
  818.  
  819.                         LT_New(Handle,
  820.                             LA_Type,    VERTICAL_KIND,
  821.                         TAG_DONE);
  822.                         {
  823.                             LT_New(Handle,
  824.                                 LA_Type,    CYCLE_KIND,
  825.                                 LA_LabelID,    MSG_SCREENPANEL_STATUS_LINE_GAD,
  826.                                 LA_BYTE,    &LocalConfig -> ScreenConfig -> StatusLine,
  827.                                 LACY_FirstLabel,MSG_SCREENPANEL_STATUS_DISABLED_TXT,
  828.                                 LACY_LastLabel,    MSG_SCREENPANEL_STATUS_COMPACT_TXT,
  829.                                 LA_ID,        GAD_STATUS_LINE,
  830.                             TAG_DONE);
  831.  
  832.                             LT_New(Handle,
  833.                                 LA_Type,    CYCLE_KIND,
  834.                                 LA_LabelID,    MSG_SCREENPANEL_ONLINE_TIME_GAD,
  835.                                 LA_BYTE,    &LocalConfig -> ScreenConfig -> TimeMode,
  836.                                 LACY_FirstLabel,MSG_SCREENPANEL_TIME_ONLINETIME_TXT,
  837.                                 LACY_LastLabel,    MSG_SCREENPANEL_TIME_BOTH_TXT,
  838.                             TAG_DONE);
  839.  
  840.                             LT_EndGroup(Handle);
  841.                         }
  842.  
  843.                         LT_EndGroup(Handle);
  844.                     }
  845.  
  846.                     LT_EndGroup(Handle);
  847.                 }
  848.  
  849.                 LT_New(Handle,
  850.                     LA_Type,    VERTICAL_KIND,
  851.                 TAG_DONE);
  852.                 {
  853.                     LT_New(Handle,
  854.                         LA_Type,    VERTICAL_KIND,
  855.                         LA_LabelID,    MSG_V36_0165,
  856.                     TAG_DONE);
  857.                     {
  858.                         LT_New(Handle,
  859.                             LA_Type,    CYCLE_KIND,
  860.                             LA_LabelID,    MSG_SCREENPANEL_COLOUR_GAD,
  861.                             LA_WORD,    &LocalConfig -> ScreenConfig -> ColourMode,
  862.                             LA_ID,        GAD_COLOURMODE,
  863.                             LACY_FirstLabel,MSG_SCREENPANEL_COLOUR_AMIGA_TXT,
  864.                             LACY_LastLabel,    MSG_SCREENPANEL_COLOUR_MONO_TXT,
  865.                             GA_Disabled,    LocalConfig -> ScreenConfig -> UseWorkbench,
  866.                         TAG_DONE);
  867.  
  868.                         LT_New(Handle,
  869.                             LA_Type,    CHECKBOX_KIND,
  870.                             LA_LabelID,    MSG_SCREENPANEL_BLINKING_GAD,
  871.                             LA_ID,        GAD_BLINKING,
  872.                             LA_BYTE,    &LocalConfig -> ScreenConfig -> Blinking,
  873.                             GA_Disabled,    LocalConfig -> ScreenConfig -> UseWorkbench || LocalConfig -> ScreenConfig -> ColourMode == COLOUR_MONO,
  874.                         TAG_DONE);
  875.  
  876.                         LT_EndGroup(Handle);
  877.                     }
  878.  
  879.                     LT_New(Handle,
  880.                         LA_Type,    VERTICAL_KIND,
  881.                         LA_LabelID,    MSG_V36_0166,
  882.                     TAG_DONE);
  883.                     {
  884.                         LONG Depth;
  885.  
  886.                         switch(LocalConfig -> ScreenConfig -> ColourMode)
  887.                         {
  888.                             case COLOUR_MONO:
  889.  
  890.                                 Depth = 1;
  891.                                 break;
  892.  
  893.                             case COLOUR_AMIGA:
  894.  
  895.                                 Depth = 2;
  896.                                 break;
  897.  
  898.                             case COLOUR_EIGHT:
  899.  
  900.                                 Depth = 3;
  901.                                 break;
  902.  
  903.                             case COLOUR_SIXTEEN:
  904.  
  905.                                 Depth = 4;
  906.                                 break;
  907.                         }
  908.  
  909.                         if(LocalConfig -> ScreenConfig -> UseWorkbench)
  910.                         {
  911.                             LONG i,MaxDepth = 4;
  912.  
  913.                             for(i = 0 ; i < 4 ; i++)
  914.                             {
  915.                                 if((1L << i) > Window -> WScreen -> ViewPort . ColorMap -> Count)
  916.                                 {
  917.                                     MaxDepth = i;
  918.  
  919.                                     break;
  920.                                 }
  921.                             }
  922.  
  923.                             if(Depth > MaxDepth)
  924.                                 Depth = MaxDepth;
  925.                         }
  926.  
  927.                         LT_New(Handle,
  928.                             LA_Type,    VERTICAL_KIND,
  929.                         TAG_DONE);
  930.                         {
  931.                             LT_New(Handle,
  932.                                 LA_Type,    PALETTE_KIND,
  933.                                 LA_LabelID,    MSG_SCREENPANEL_EDIT_SCREEN_PALETTE_GAD,
  934.                                 LA_ID,        GAD_PALETTE,
  935.                                 LA_Chars,    16,
  936.                                 GTPA_Depth,    Depth,
  937.                                 GA_Disabled,    WrongMode,
  938.                             TAG_DONE);
  939.  
  940.                             LT_New(Handle,
  941.                                 LA_Type,        SLIDER_KIND,
  942.                                 LA_LabelID,        MSG_SCREENPANEL_RED_GAD,
  943.                                 LA_ID,            GAD_RED,
  944.                                 GTSL_Min,        0,
  945.                                 GTSL_Max,        15,
  946.                                 GTSL_Level,        0,
  947.                                 GTSL_LevelFormat,    "%2ld",
  948.                                 GA_Disabled,        WrongMode,
  949.                             TAG_DONE);
  950.  
  951.                             LT_New(Handle,
  952.                                 LA_Type,        SLIDER_KIND,
  953.                                 LA_LabelID,        MSG_SCREENPANEL_GREEN_GAD,
  954.                                 LA_ID,            GAD_GREEN,
  955.                                 GTSL_Min,        0,
  956.                                 GTSL_Max,        15,
  957.                                 GTSL_Level,        0,
  958.                                 GTSL_LevelFormat,    "%2ld",
  959.                                 GA_Disabled,        WrongMode,
  960.                             TAG_DONE);
  961.  
  962.                             LT_New(Handle,
  963.                                 LA_Type,        SLIDER_KIND,
  964.                                 LA_LabelID,        MSG_SCREENPANEL_BLUE_GAD,
  965.                                 LA_ID,            GAD_BLUE,
  966.                                 GTSL_Min,        0,
  967.                                 GTSL_Max,        15,
  968.                                 GTSL_Level,        0,
  969.                                 GTSL_LevelFormat,    "%2ld",
  970.                                 GA_Disabled,        WrongMode,
  971.                             TAG_DONE);
  972.  
  973.                             LT_New(Handle,
  974.                                 LA_Type,        XBAR_KIND,
  975.                             TAG_DONE);
  976.  
  977.                             LT_EndGroup(Handle);
  978.                         }
  979.  
  980.                         LT_New(Handle,
  981.                             LA_Type,    VERTICAL_KIND,
  982.                         TAG_DONE);
  983.                         {
  984.                             LT_New(Handle,
  985.                                 LA_Type,    BUTTON_KIND,
  986.                                 LA_LabelID,    MSG_SCREENPANEL_USE_DEFAULT_TXT,
  987.                                 LA_ID,        GAD_RESET,
  988.                                 LA_Chars,    16,
  989.                                 GA_Disabled,    WrongMode,
  990.                             TAG_DONE);
  991.  
  992.                             LT_EndGroup(Handle);
  993.                         }
  994.  
  995.                         LT_EndGroup(Handle);
  996.                     }
  997.  
  998.                     if(Kick30)
  999.                     {
  1000.                         LT_New(Handle,
  1001.                             LA_Type,    VERTICAL_KIND,
  1002.                             LA_LabelID,    MSG_PENPANEL_DRAWING_PENS_TXT,
  1003.                         TAG_DONE);
  1004.                         {
  1005.                             LT_New(Handle,
  1006.                                 LA_Type,    VERTICAL_KIND,
  1007.                             TAG_DONE);
  1008.                             {
  1009.                                 LT_New(Handle,
  1010.                                     LA_Type,    CHECKBOX_KIND,
  1011.                                     LA_LabelID,    MSG_PENPANEL_STANDARDPENS_TXT,
  1012.                                     LA_ID,        GAD_STDPENS,
  1013.                                     LA_BYTE,    &LocalConfig -> ScreenConfig -> UsePens,
  1014.                                     GA_Disabled,    LocalConfig -> ScreenConfig -> UseWorkbench || WrongMode,
  1015.                                 TAG_DONE);
  1016.  
  1017.                                 LT_EndGroup(Handle);
  1018.                             }
  1019.  
  1020.                             LT_New(Handle,
  1021.                                 LA_Type,    VERTICAL_KIND,
  1022.                             TAG_DONE);
  1023.                             {
  1024.                                 LT_New(Handle,
  1025.                                     LA_Type,    BUTTON_KIND,
  1026.                                     LA_LabelID,    MSG_PENPANEL_EDITPENS_TXT,
  1027.                                     LA_ID,        GAD_EDITPENS,
  1028.                                     GA_Disabled,    LocalConfig -> ScreenConfig -> UsePens || LocalConfig -> ScreenConfig -> UseWorkbench || WrongMode,
  1029.                                 TAG_DONE);
  1030.  
  1031.                                 LT_EndGroup(Handle);
  1032.                             }
  1033.  
  1034.                             LT_EndGroup(Handle);
  1035.                         }
  1036.                     }
  1037.  
  1038.                     LT_EndGroup(Handle);
  1039.                 }
  1040.  
  1041.                 LT_EndGroup(Handle);
  1042.             }
  1043.  
  1044.             LT_New(Handle,
  1045.                 LA_Type,    VERTICAL_KIND,
  1046.             TAG_DONE);
  1047.             {
  1048.                 LT_New(Handle,LA_Type,XBAR_KIND,LAXB_FullSize,TRUE,TAG_DONE);
  1049.  
  1050.                 LT_EndGroup(Handle);
  1051.             }
  1052.  
  1053.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  1054.                 LAGR_SameSize,    TRUE,
  1055.                 LAGR_Spread,    TRUE,
  1056.             TAG_DONE);
  1057.             {
  1058.                 LT_New(Handle,
  1059.                     LA_Type,    BUTTON_KIND,
  1060.                     LA_LabelID,    MSG_GLOBAL_USE_GAD,
  1061.                     LA_ID,        GAD_USE,
  1062.                     LABT_ReturnKey,    TRUE,
  1063.                     LABT_ExtraFat,    TRUE,
  1064.                 TAG_DONE);
  1065.  
  1066.                 if(Default)
  1067.                 {
  1068.                     LT_New(Handle,
  1069.                         LA_Type,    BUTTON_KIND,
  1070.                         LA_LabelID,    MSG_GLOBAL_DEFAULT_GAD,
  1071.                         LA_ID,        GAD_DEFAULT,
  1072.                         LABT_ExtraFat,    TRUE,
  1073.                     TAG_DONE);
  1074.                 }
  1075.  
  1076.                 LT_New(Handle,
  1077.                     LA_Type,    BUTTON_KIND,
  1078.                     LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  1079.                     LA_ID,        GAD_CANCEL,
  1080.                     LABT_EscKey,    TRUE,
  1081.                     LABT_ExtraFat,    TRUE,
  1082.                 TAG_DONE);
  1083.  
  1084.                 LT_EndGroup(Handle);
  1085.             }
  1086.  
  1087.             LT_EndGroup(Handle);
  1088.         }
  1089.  
  1090.         if(LocalWindow = LT_Layout(Handle,LocaleString(MSG_SCREENPANEL_SCREEN_PREFERENCES_TXT),NULL,0,0,IDCMP_CLOSEWINDOW,0,
  1091.             LAWN_HelpHook,        &GuideHook,
  1092.             LAWN_Parent,        Window,
  1093.             WA_DepthGadget,        TRUE,
  1094.             WA_CloseGadget,        TRUE,
  1095.             WA_DragBar,        TRUE,
  1096.             WA_RMBTrap,        TRUE,
  1097.             WA_Activate,        TRUE,
  1098.         TAG_DONE))
  1099.         {
  1100.             struct IntuiMessage    *Message;
  1101.             BOOLEAN             Done = FALSE;
  1102.             ULONG             MsgClass,
  1103.                          MsgQualifier;
  1104.             UWORD             MsgCode;
  1105.             struct Gadget        *MsgGadget;
  1106.  
  1107.             WORD             ColourNumber = 0,Count,i;
  1108.             BYTE             Red,Green,Blue;
  1109.             struct ViewPort        *LocalVPort = &LocalWindow -> WScreen -> ViewPort;
  1110.  
  1111.             UWORD            *DefaultPens,Depth;
  1112.  
  1113.             switch(LocalConfig -> ScreenConfig -> ColourMode)
  1114.             {
  1115.                 case COLOUR_MONO:
  1116.  
  1117.                     DefaultPens = MonoPens;
  1118.                     Depth = 1;
  1119.                     break;
  1120.  
  1121.                 case COLOUR_AMIGA:
  1122.  
  1123.                     DefaultPens = StandardPens;
  1124.                     Depth = 2;
  1125.                     break;
  1126.  
  1127.                 case COLOUR_EIGHT:
  1128.  
  1129.                     DefaultPens = ANSIPens;
  1130.                     Depth = 3;
  1131.                     break;
  1132.  
  1133.                 case COLOUR_SIXTEEN:
  1134.  
  1135.                     DefaultPens = EGAPens;
  1136.                     Depth = 4;
  1137.                     break;
  1138.             }
  1139.  
  1140.             for(Count = 0, i = DETAILPEN ; i <= BARTRIMPEN ; i++)
  1141.             {
  1142.                 if(LocalConfig -> ScreenConfig -> PenArray[i])
  1143.                     Count++;
  1144.             }
  1145.  
  1146.             if(!Count)
  1147.                 CopyMem(DefaultPens,LocalConfig -> ScreenConfig -> PenArray,16 * sizeof(UWORD));
  1148.  
  1149.             LocalConfig -> ScreenConfig -> DisplayMode = DisplayMode;
  1150.  
  1151.             if(!WrongMode)
  1152.             {
  1153.                 Red    = (LocalConfig -> ScreenConfig -> Colours[ColourNumber] >> 8) & 0xF;
  1154.                 Green    = (LocalConfig -> ScreenConfig -> Colours[ColourNumber] >> 4) & 0xF;
  1155.                 Blue    = (LocalConfig -> ScreenConfig -> Colours[ColourNumber]     ) & 0xF;
  1156.  
  1157.                 LT_SetAttributes(Handle,GAD_RED,    GTSL_Level,    Red,    TAG_DONE);
  1158.                 LT_SetAttributes(Handle,GAD_GREEN,    GTSL_Level,    Green,    TAG_DONE);
  1159.                 LT_SetAttributes(Handle,GAD_BLUE,    GTSL_Level,    Blue,    TAG_DONE);
  1160.  
  1161.                 if(Screen)
  1162.                 {
  1163.                     LoadRGB4(VPort,NormalColours,PaletteSize);
  1164.                     LoadRGB4(LocalVPort,NormalColours,PaletteSize);
  1165.                 }
  1166.             }
  1167.  
  1168.             GuideContext(CONTEXT_SCREEN);
  1169.  
  1170.             PushWindow(LocalWindow);
  1171.  
  1172.             LT_ShowWindow(Handle,TRUE);
  1173.  
  1174.             do
  1175.             {
  1176.                 if(Wait(PORTMASK(LocalWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  1177.                 {
  1178.                     SaveConfig(PrivateConfig,LocalConfig);
  1179.  
  1180.                     if(!Config -> ScreenConfig -> UseWorkbench && Screen)
  1181.                     {
  1182.                         if(!memcmp(Config -> ScreenConfig -> Colours,LocalConfig -> ScreenConfig -> Colours,sizeof(UWORD) * 16))
  1183.                             PaletteSetup(LocalConfig);
  1184.                         else
  1185.                             PaletteSetup(Config);
  1186.  
  1187.                         LoadRGB4(VPort,NormalColours,PaletteSize);
  1188.                         LoadRGB4(LocalVPort,NormalColours,PaletteSize);
  1189.                     }
  1190.  
  1191.                     break;
  1192.                 }
  1193.  
  1194.                 while(Message = (struct IntuiMessage *)GT_GetIMsg(LocalWindow -> UserPort))
  1195.                 {
  1196.                     MsgClass    = Message -> Class;
  1197.                     MsgQualifier    = Message -> Qualifier;
  1198.                     MsgCode        = Message -> Code;
  1199.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  1200.  
  1201.                     GT_ReplyIMsg(Message);
  1202.  
  1203.                     LT_HandleInput(Handle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  1204.  
  1205.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  1206.                     {
  1207.                         SaveConfig(PrivateConfig,LocalConfig);
  1208.  
  1209.                         if(!Config -> ScreenConfig -> UseWorkbench && Screen)
  1210.                         {
  1211.                             if(!memcmp(Config -> ScreenConfig -> Colours,LocalConfig -> ScreenConfig -> Colours,sizeof(UWORD) * 16))
  1212.                                 PaletteSetup(LocalConfig);
  1213.                             else
  1214.                                 PaletteSetup(Config);
  1215.  
  1216.                             LoadRGB4(VPort,NormalColours,PaletteSize);
  1217.                             LoadRGB4(LocalVPort,NormalColours,PaletteSize);
  1218.                         }
  1219.  
  1220.                         Done = TRUE;
  1221.                     }
  1222.  
  1223.                     if(MsgClass == IDCMP_MOUSEMOVE)
  1224.                     {
  1225.                         switch(MsgGadget -> GadgetID)
  1226.                         {
  1227.                             case GAD_RED:
  1228.  
  1229.                                 Red = MsgCode;
  1230.  
  1231.                                 LocalConfig -> ScreenConfig -> Colours[ColourNumber] = (Red << 8) | (Green << 4) | (Blue);
  1232.  
  1233.                                 PaletteSetup(LocalConfig);
  1234.  
  1235.                                 LoadRGB4(VPort,NormalColours,PaletteSize);
  1236.                                 LoadRGB4(LocalVPort,NormalColours,PaletteSize);
  1237.  
  1238.                                 break;
  1239.  
  1240.                             case GAD_GREEN:
  1241.  
  1242.                                 Green = MsgCode;
  1243.  
  1244.                                 LocalConfig -> ScreenConfig -> Colours[ColourNumber] = (Red << 8) | (Green << 4) | (Blue);
  1245.  
  1246.                                 PaletteSetup(LocalConfig);
  1247.  
  1248.                                 LoadRGB4(VPort,NormalColours,PaletteSize);
  1249.                                 LoadRGB4(LocalVPort,NormalColours,PaletteSize);
  1250.  
  1251.                                 break;
  1252.  
  1253.                             case GAD_BLUE:
  1254.  
  1255.                                 Blue = MsgCode;
  1256.  
  1257.                                 LocalConfig -> ScreenConfig -> Colours[ColourNumber] = (Red << 8) | (Green << 4) | (Blue);
  1258.  
  1259.                                 PaletteSetup(LocalConfig);
  1260.  
  1261.                                 LoadRGB4(VPort,NormalColours,PaletteSize);
  1262.                                 LoadRGB4(LocalVPort,NormalColours,PaletteSize);
  1263.  
  1264.                                 break;
  1265.                         }
  1266.                     }
  1267.  
  1268.                     if(MsgClass == IDCMP_GADGETUP)
  1269.                     {
  1270.                         switch(MsgGadget -> GadgetID)
  1271.                         {
  1272.                             case GAD_STDPENS:
  1273.  
  1274.                                 LT_SetAttributes(Handle,GAD_EDITPENS,
  1275.                                     GA_Disabled,LocalConfig -> ScreenConfig -> UsePens || LocalConfig -> ScreenConfig -> UseWorkbench || WrongMode,
  1276.                                 TAG_DONE);
  1277.  
  1278.                                 break;
  1279.  
  1280.                             case GAD_USE_PUBSCREEN:
  1281.  
  1282.                                 LT_SetAttributes(Handle,GAD_PUBSCREENNAME,GA_Disabled,!LocalConfig -> ScreenConfig -> UseWorkbench,TAG_DONE);
  1283.                                 LT_SetAttributes(Handle,GAD_MAKESCREENPUBLIC,GA_Disabled,LocalConfig -> ScreenConfig -> UseWorkbench,TAG_DONE);
  1284.                                 LT_SetAttributes(Handle,GAD_SHANGHAI,GA_Disabled,LocalConfig -> ScreenConfig -> UseWorkbench,TAG_DONE);
  1285.                                 LT_SetAttributes(Handle,GAD_SCREENTITLE,GA_Disabled,LocalConfig -> ScreenConfig -> UseWorkbench,TAG_DONE);
  1286.                                 LT_SetAttributes(Handle,GAD_WINDOW_BORDER,GA_Disabled,LocalConfig -> ScreenConfig -> UseWorkbench,TAG_DONE);
  1287.                                 LT_SetAttributes(Handle,GAD_BLINKING,GA_Disabled,LocalConfig -> ScreenConfig -> UseWorkbench || LocalConfig -> ScreenConfig -> ColourMode == COLOUR_MONO,TAG_DONE);
  1288.                                 LT_SetAttributes(Handle,GAD_COLOURMODE,GA_Disabled,LocalConfig -> ScreenConfig -> UseWorkbench || LocalConfig -> ScreenConfig -> ColourMode == COLOUR_MONO,TAG_DONE);
  1289.                                 LT_SetAttributes(Handle,GAD_SPLIT_STATUS,GA_Disabled,!LocalConfig -> ScreenConfig -> StatusLine || (!LocalConfig -> ScreenConfig -> ShareScreen && !LocalConfig -> ScreenConfig -> UseWorkbench),TAG_DONE);
  1290.  
  1291.                                 WrongMode = IsWrongMode(LocalConfig,PrivateConfig -> ScreenConfig -> ColourMode);
  1292.  
  1293.                                 LT_SetAttributes(Handle,GAD_PALETTE,GA_Disabled,WrongMode,TAG_DONE);
  1294.                                 LT_SetAttributes(Handle,GAD_RED,GA_Disabled,WrongMode,TAG_DONE);
  1295.                                 LT_SetAttributes(Handle,GAD_GREEN,GA_Disabled,WrongMode,TAG_DONE);
  1296.                                 LT_SetAttributes(Handle,GAD_BLUE,GA_Disabled,WrongMode,TAG_DONE);
  1297.                                 LT_SetAttributes(Handle,GAD_RESET,GA_Disabled,WrongMode,TAG_DONE);
  1298.  
  1299.                                 LT_SetAttributes(Handle,GAD_EDITPENS,
  1300.                                     GA_Disabled,    LocalConfig -> ScreenConfig -> UsePens || LocalConfig -> ScreenConfig -> UseWorkbench || WrongMode,
  1301.                                 TAG_DONE);
  1302.  
  1303.                                 LT_SetAttributes(Handle,GAD_STDPENS,
  1304.                                     GTCB_Checked,    LocalConfig -> ScreenConfig -> UsePens = TRUE,
  1305.                                     GA_Disabled,    LocalConfig -> ScreenConfig -> UseWorkbench || WrongMode,
  1306.                                 TAG_DONE);
  1307.  
  1308.                                 break;
  1309.  
  1310.                             case GAD_WINDOW_BORDER:
  1311.  
  1312.                                 LT_SetAttributes(Handle,GAD_SPLIT_STATUS,GA_Disabled,!LocalConfig -> ScreenConfig -> StatusLine || (!LocalConfig -> ScreenConfig -> ShareScreen && !LocalConfig -> ScreenConfig -> UseWorkbench),TAG_DONE);
  1313.                                 break;
  1314.  
  1315.                             case GAD_COLOURMODE:
  1316.  
  1317.                                 if(!ModeOkay(LocalConfig -> ScreenConfig -> DisplayMode) && LocalConfig -> ScreenConfig -> ColourMode > COLOUR_AMIGA)
  1318.                                     LT_SetAttributes(Handle,GAD_COLOURMODE,GTCY_Active,COLOUR_AMIGA,TAG_DONE);
  1319.  
  1320.                                 WrongMode = IsWrongMode(LocalConfig,PrivateConfig -> ScreenConfig -> ColourMode);
  1321.  
  1322.                                 LT_SetAttributes(Handle,GAD_PALETTE,GA_Disabled,WrongMode,TAG_DONE);
  1323.                                 LT_SetAttributes(Handle,GAD_RED,GA_Disabled,WrongMode,TAG_DONE);
  1324.                                 LT_SetAttributes(Handle,GAD_GREEN,GA_Disabled,WrongMode,TAG_DONE);
  1325.                                 LT_SetAttributes(Handle,GAD_BLUE,GA_Disabled,WrongMode,TAG_DONE);
  1326.                                 LT_SetAttributes(Handle,GAD_RESET,GA_Disabled,WrongMode,TAG_DONE);
  1327.  
  1328.                                 LT_SetAttributes(Handle,GAD_BLINKING,GA_Disabled,LocalConfig -> ScreenConfig -> UseWorkbench || LocalConfig -> ScreenConfig -> ColourMode == COLOUR_MONO,TAG_DONE);
  1329.  
  1330.                                 switch(LocalConfig -> ScreenConfig -> ColourMode)
  1331.                                 {
  1332.                                     case COLOUR_MONO:
  1333.  
  1334.                                         DefaultPens = MonoPens;
  1335.                                         Depth = 1;
  1336.                                         break;
  1337.  
  1338.                                     case COLOUR_AMIGA:
  1339.  
  1340.                                         DefaultPens = StandardPens;
  1341.                                         Depth = 2;
  1342.                                         break;
  1343.  
  1344.                                     case COLOUR_EIGHT:
  1345.  
  1346.                                         DefaultPens = ANSIPens;
  1347.                                         Depth = 3;
  1348.                                         break;
  1349.  
  1350.                                     case COLOUR_SIXTEEN:
  1351.  
  1352.                                         DefaultPens = EGAPens;
  1353.                                         Depth = 4;
  1354.                                         break;
  1355.                                 }
  1356.  
  1357.                                 LT_SetAttributes(Handle,GAD_EDITPENS,
  1358.                                     GA_Disabled,    LocalConfig -> ScreenConfig -> UsePens || LocalConfig -> ScreenConfig -> UseWorkbench || WrongMode,
  1359.                                 TAG_DONE);
  1360.  
  1361.                                 LT_SetAttributes(Handle,GAD_STDPENS,
  1362.                                     GA_Disabled,    LocalConfig -> ScreenConfig -> UseWorkbench || WrongMode,
  1363.                                 TAG_DONE);
  1364.  
  1365.                                 break;
  1366.  
  1367.                             case GAD_EDITPENS:
  1368.  
  1369.                                 LT_LockWindow(LocalWindow);
  1370.  
  1371.                                 if(LocalConfig -> ScreenConfig -> PenColourMode != LocalConfig -> ScreenConfig -> ColourMode)
  1372.                                 {
  1373.                                     UWORD LocalPens[16];
  1374.  
  1375.                                     CopyMem(DefaultPens,LocalPens,16 * sizeof(UWORD));
  1376.  
  1377.                                     if(PenPanel(LocalWindow,LocalPens,DefaultPens,Depth))
  1378.                                     {
  1379.                                         CopyMem(LocalPens,LocalConfig -> ScreenConfig -> PenArray,16 * sizeof(UWORD));
  1380.  
  1381.                                         LocalConfig -> ScreenConfig -> PenColourMode = LocalConfig -> ScreenConfig -> ColourMode;
  1382.                                     }
  1383.                                 }
  1384.                                 else
  1385.                                     PenPanel(LocalWindow,LocalConfig -> ScreenConfig -> PenArray,DefaultPens,Depth);
  1386.  
  1387.                                 LT_UnlockWindow(LocalWindow);
  1388.  
  1389.                                 LT_ShowWindow(Handle,TRUE);
  1390.                                 break;
  1391.  
  1392.                             case GAD_MAKESCREENPUBLIC:
  1393.  
  1394.                                 LT_SetAttributes(Handle,GAD_SHANGHAI,
  1395.                                     GA_Disabled,    !LocalConfig -> ScreenConfig -> MakeScreenPublic || LocalConfig -> ScreenConfig -> UseWorkbench,
  1396.                                 TAG_DONE);
  1397.  
  1398.                                 break;
  1399.  
  1400.                             case GAD_PALETTE:
  1401.  
  1402.                                 ColourNumber = MsgCode;
  1403.  
  1404.                                 Red    = (LocalConfig -> ScreenConfig -> Colours[ColourNumber] >> 8) & 0xF;
  1405.                                 Green    = (LocalConfig -> ScreenConfig -> Colours[ColourNumber] >> 4) & 0xF;
  1406.                                 Blue    = (LocalConfig -> ScreenConfig -> Colours[ColourNumber]     ) & 0xF;
  1407.  
  1408.                                 LT_SetAttributes(Handle,GAD_RED,    GTSL_Level,    Red,    TAG_DONE);
  1409.                                 LT_SetAttributes(Handle,GAD_GREEN,    GTSL_Level,    Green,    TAG_DONE);
  1410.                                 LT_SetAttributes(Handle,GAD_BLUE,    GTSL_Level,    Blue,    TAG_DONE);
  1411.  
  1412.                                 break;
  1413.  
  1414.                             case GAD_RESET:
  1415.  
  1416.                                 switch(LocalConfig -> ScreenConfig -> ColourMode)
  1417.                                 {
  1418.                                     case COLOUR_AMIGA:
  1419.  
  1420.                                         CopyMem(DefaultColours,LocalConfig -> ScreenConfig -> Colours,16 * sizeof(UWORD));
  1421.                                         break;
  1422.  
  1423.                                     case COLOUR_EIGHT:
  1424.  
  1425.                                         CopyMem(ANSIColours,LocalConfig -> ScreenConfig -> Colours,16 * sizeof(UWORD));
  1426.                                         break;
  1427.  
  1428.                                     case COLOUR_SIXTEEN:
  1429.  
  1430.                                         CopyMem(EGAColours,LocalConfig -> ScreenConfig -> Colours,16 * sizeof(UWORD));
  1431.                                         break;
  1432.  
  1433.                                     case COLOUR_MONO:
  1434.  
  1435.                                         CopyMem(AtomicColours,LocalConfig -> ScreenConfig -> Colours,16 * sizeof(UWORD));
  1436.                                         break;
  1437.                                 }
  1438.  
  1439.                                 Red    = (LocalConfig -> ScreenConfig -> Colours[ColourNumber] >> 8) & 0xF;
  1440.                                 Green    = (LocalConfig -> ScreenConfig -> Colours[ColourNumber] >> 4) & 0xF;
  1441.                                 Blue    = (LocalConfig -> ScreenConfig -> Colours[ColourNumber]     ) & 0xF;
  1442.  
  1443.                                 LT_SetAttributes(Handle,GAD_RED,    GTSL_Level,    Red,    TAG_DONE);
  1444.                                 LT_SetAttributes(Handle,GAD_GREEN,    GTSL_Level,    Green,    TAG_DONE);
  1445.                                 LT_SetAttributes(Handle,GAD_BLUE,    GTSL_Level,    Blue,    TAG_DONE);
  1446.  
  1447.                                 PaletteSetup(LocalConfig);
  1448.                                 LoadRGB4(LocalVPort,NormalColours,PaletteSize);
  1449.                                 LoadRGB4(VPort,NormalColours,PaletteSize);
  1450.  
  1451.                                 break;
  1452.  
  1453.                             case GAD_USE:
  1454.  
  1455.                                 if(!WrongMode)
  1456.                                     PaletteSetup(LocalConfig);
  1457.                                 else
  1458.                                 {
  1459.                                     if(LocalConfig -> ScreenConfig -> ColourMode != PrivateConfig -> ScreenConfig -> ColourMode)
  1460.                                     {
  1461.                                         switch(LocalConfig -> ScreenConfig -> ColourMode)
  1462.                                         {
  1463.                                             case COLOUR_EIGHT:
  1464.  
  1465.                                                 CopyMem(ANSIColours,LocalConfig -> ScreenConfig -> Colours,16 * sizeof(UWORD));
  1466.                                                 break;
  1467.  
  1468.                                             case COLOUR_SIXTEEN:
  1469.  
  1470.                                                 CopyMem(EGAColours,LocalConfig -> ScreenConfig -> Colours,16 * sizeof(UWORD));
  1471.                                                 break;
  1472.  
  1473.                                             case COLOUR_AMIGA:
  1474.  
  1475.                                                 CopyMem(DefaultColours,LocalConfig -> ScreenConfig -> Colours,16 * sizeof(UWORD));
  1476.                                                 break;
  1477.  
  1478.                                             case COLOUR_MONO:
  1479.  
  1480.                                                 CopyMem(AtomicColours,LocalConfig -> ScreenConfig -> Colours,16 * sizeof(UWORD));
  1481.                                                 break;
  1482.                                         }
  1483.                                     }
  1484.                                 }
  1485.  
  1486.                                 if(LocalConfig -> ScreenConfig -> PenColourMode != LocalConfig -> ScreenConfig -> ColourMode)
  1487.                                 {
  1488.                                     CopyMem(DefaultPens,LocalConfig -> ScreenConfig -> PenArray,16 * sizeof(UWORD));
  1489.  
  1490.                                     LocalConfig -> ScreenConfig -> PenColourMode = LocalConfig -> ScreenConfig -> ColourMode;
  1491.                                 }
  1492.  
  1493.                                 Done = TRUE;
  1494.                                 break;
  1495.  
  1496.                             case GAD_CANCEL:
  1497.  
  1498.                                 SaveConfig(PrivateConfig,LocalConfig);
  1499.  
  1500.                                 if(!Config -> ScreenConfig -> UseWorkbench && Screen)
  1501.                                 {
  1502.                                     if(!memcmp(Config -> ScreenConfig -> Colours,LocalConfig -> ScreenConfig -> Colours,sizeof(UWORD) * 16))
  1503.                                         PaletteSetup(LocalConfig);
  1504.                                     else
  1505.                                         PaletteSetup(Config);
  1506.  
  1507.                                     LoadRGB4(LocalVPort,NormalColours,PaletteSize);
  1508.                                     LoadRGB4(VPort,NormalColours,PaletteSize);
  1509.                                 }
  1510.  
  1511.                                 Cancel = Done = TRUE;
  1512.                                 break;
  1513.  
  1514.                             case GAD_DEFAULT:
  1515.  
  1516.                                 *Default = TRUE;
  1517.  
  1518.                                 SaveConfig(PrivateConfig,LocalConfig);
  1519.  
  1520.                                 if(!Config -> ScreenConfig -> UseWorkbench && Screen)
  1521.                                 {
  1522.                                     if(!memcmp(Config -> ScreenConfig -> Colours,LocalConfig -> ScreenConfig -> Colours,sizeof(UWORD) * 16))
  1523.                                         PaletteSetup(LocalConfig);
  1524.                                     else
  1525.                                         PaletteSetup(Config);
  1526.  
  1527.                                     LoadRGB4(LocalVPort,NormalColours,PaletteSize);
  1528.                                     LoadRGB4(VPort,NormalColours,PaletteSize);
  1529.                                 }
  1530.  
  1531.                                 Done = TRUE;
  1532.                                 break;
  1533.                         }
  1534.                     }
  1535.  
  1536.                     if(MsgClass == IDCMP_IDCMPUPDATE)
  1537.                     {
  1538.                         switch(MsgGadget -> GadgetID)
  1539.                         {
  1540.                             case GAD_FONT:
  1541.  
  1542.                                 LT_LockWindow(LocalWindow);
  1543.  
  1544. /*                                if(PickFont(LocalWindow,LocalConfig -> ScreenConfig -> FontName,&LocalConfig -> ScreenConfig -> FontHeight,!Kick30))*/
  1545.  
  1546.                                 if(PickFont(LocalWindow,LocalConfig -> ScreenConfig -> FontName,&LocalConfig -> ScreenConfig -> FontHeight,FALSE))
  1547.                                 {
  1548.                                     BuildFontName(FontName,LocalConfig -> ScreenConfig -> FontName,LocalConfig -> ScreenConfig -> FontHeight);
  1549.  
  1550.                                     LT_SetAttributes(Handle,GAD_FONT,
  1551.                                         GTTX_Text,    FontName,
  1552.                                     TAG_DONE);
  1553.                                 }
  1554.  
  1555.                                 LT_UnlockWindow(LocalWindow);
  1556.  
  1557.                                 break;
  1558.  
  1559.                             case GAD_SCREENMODE:
  1560.  
  1561.                                 LT_LockWindow(LocalWindow);
  1562.  
  1563.                                 if(SelectDisplayMode(LocalWindow,&LocalConfig -> ScreenConfig -> DisplayMode,LocalConfig))
  1564.                                 {
  1565.                                     strcpy(ModeName,GetModeName(LocalConfig -> ScreenConfig -> DisplayMode));
  1566.  
  1567.                                     LT_SetAttributes(Handle,GAD_SCREENMODE,GTTX_Text,ModeName,TAG_DONE);
  1568.                                 }
  1569.  
  1570.                                 LT_UnlockWindow(LocalWindow);
  1571.  
  1572.                                 LT_ShowWindow(Handle,TRUE);
  1573.  
  1574.                                 break;
  1575.  
  1576.                             case GAD_STATUS_LINE:
  1577.  
  1578.                                 LT_SetAttributes(Handle,GAD_SPLIT_STATUS,GA_Disabled,!LocalConfig -> ScreenConfig -> StatusLine || (!LocalConfig -> ScreenConfig -> ShareScreen && !LocalConfig -> ScreenConfig -> UseWorkbench),TAG_DONE);
  1579.  
  1580.                                 break;
  1581.  
  1582.                             case GAD_PUBSCREENNAME:
  1583.  
  1584.                                 if(LocalConfig -> ScreenConfig -> UseWorkbench)
  1585.                                 {
  1586.                                     UBYTE DummyBuffer[MAXPUBSCREENNAME + 1];
  1587.  
  1588.                                     LT_LockWindow(LocalWindow);
  1589.  
  1590.                                     strcpy(DummyBuffer,(STRPTR)LT_GetAttributes(Handle,GAD_PUBSCREENNAME,TAG_DONE));
  1591.                                     strcpy(SharedBuffer,DummyBuffer);
  1592.  
  1593.                                     if(PickScreen(LocalWindow,DummyBuffer))
  1594.                                     {
  1595.                                         if(strcmp(DummyBuffer,SharedBuffer))
  1596.                                             LT_SetAttributes(Handle,GAD_PUBSCREENNAME,GTST_String,DummyBuffer,TAG_DONE);
  1597.                                     }
  1598.  
  1599.                                     LT_UnlockWindow(LocalWindow);
  1600.  
  1601.                                     LT_ShowWindow(Handle,TRUE);
  1602.                                 }
  1603.  
  1604.                                 break;
  1605.                         }
  1606.                     }
  1607.                 }
  1608.             }
  1609.             while(!Done);
  1610.  
  1611.             PopWindow();
  1612.         }
  1613.  
  1614.         LT_DeleteHandle(Handle);
  1615.     }
  1616.  
  1617.     if(Default)
  1618.         return((BYTE)(!Cancel));
  1619.     else
  1620.     {
  1621.         if(PrivateConfig -> ScreenConfig -> DisplayMode != LocalConfig -> ScreenConfig -> DisplayMode || Stricmp(PrivateConfig -> ScreenConfig -> FontName,LocalConfig -> ScreenConfig -> FontName) || PrivateConfig -> ScreenConfig -> FontHeight != LocalConfig -> ScreenConfig -> FontHeight || PrivateConfig -> ScreenConfig -> ColourMode != LocalConfig -> ScreenConfig -> ColourMode)
  1622.             return(TRUE);
  1623.  
  1624.         if(PrivateConfig -> ScreenConfig -> MakeScreenPublic != LocalConfig -> ScreenConfig -> MakeScreenPublic || PrivateConfig -> ScreenConfig -> ShanghaiWindows != LocalConfig -> ScreenConfig -> ShanghaiWindows)
  1625.             return(TRUE);
  1626.  
  1627.         if(PrivateConfig -> ScreenConfig -> Blinking != LocalConfig -> ScreenConfig -> Blinking && (LocalConfig -> ScreenConfig -> ColourMode == COLOUR_EIGHT || LocalConfig -> ScreenConfig -> ColourMode == COLOUR_SIXTEEN))
  1628.             return(TRUE);
  1629.  
  1630.         if(PrivateConfig -> ScreenConfig -> FasterLayout != LocalConfig -> ScreenConfig -> FasterLayout && LocalConfig -> ScreenConfig -> ColourMode != COLOUR_MONO)
  1631.             return(TRUE);
  1632.  
  1633.         if(PrivateConfig -> ScreenConfig -> TitleBar != LocalConfig -> ScreenConfig -> TitleBar || PrivateConfig -> ScreenConfig -> StatusLine != LocalConfig -> ScreenConfig -> StatusLine || PrivateConfig -> ScreenConfig -> UseWorkbench != LocalConfig -> ScreenConfig -> UseWorkbench || PrivateConfig -> ScreenConfig -> Depth != LocalConfig -> ScreenConfig -> Depth || PrivateConfig -> ScreenConfig -> OverscanType != LocalConfig -> ScreenConfig -> OverscanType || PrivateConfig -> ScreenConfig -> DisplayWidth != LocalConfig -> ScreenConfig -> DisplayWidth || PrivateConfig -> ScreenConfig -> DisplayHeight != LocalConfig -> ScreenConfig -> DisplayHeight)
  1634.             return(TRUE);
  1635.  
  1636.         if(PrivateConfig -> ScreenConfig -> ShareScreen != LocalConfig -> ScreenConfig -> ShareScreen || PrivateConfig -> ScreenConfig -> SplitStatus != LocalConfig -> ScreenConfig -> SplitStatus)
  1637.             return(TRUE);
  1638.  
  1639.         if(strcmp(PrivateConfig -> ScreenConfig -> PubScreenName,LocalConfig -> ScreenConfig -> PubScreenName) && LocalConfig -> ScreenConfig -> UseWorkbench)
  1640.             return(TRUE);
  1641.  
  1642.         if(LocalConfig -> ScreenConfig -> UsePens != PrivateConfig -> ScreenConfig -> UsePens || memcmp(LocalConfig -> ScreenConfig -> PenArray,PrivateConfig -> ScreenConfig -> PenArray,sizeof(UWORD) * 12))
  1643.             return(TRUE);
  1644.  
  1645.         return(FALSE);
  1646.     }
  1647. }
  1648.